package com.cskaoyan.javase.oop1._17access._0introduction;

import com.cskaoyan.javase.oop1._17access._1clazz.MyDemo;
// 不能用MyDemo2是因为没有访问权限,不是没有导包
// import com.cskaoyan.javase.oop1._17access._1clazz.MyDemo2;

/**
 * 访问权限控制符：在Java语言中，一切事物（类和类的所有成员,包括普通成员,静态成员,以及构造器）都具有(或显示定义或隐式定义的)访问权限，而这种语言层面的访问权限控制，是由访问权限修饰符实现的。
 *
 * 访问权限是分级别的，就像我家的房子，父母能用，我们也能用
 *      但是我的衣服是不能给别人穿的。
 * Java的访问权限的级别，是依赖包（package）来实现的。
 * Java的访问权限级别共分为以下四个级别，访问权限从严格到宽松顺序为：
 *      1. 只能够在同一类中能够访问，私有的，外面谁都不能用。
 *          仅在同类中可见,称之为私有的访问权限
 *          它对应访问权限修饰符(关键字): private
 *
 *     2.同一包中的子类或者其它类能够访问，只要是同包的关系都可以任意使用。
 *          但是只要不同包就不能访问了.
 *          这种访问权限也称之为"package-private"(包私有)
 *          也有人称之为"默认访问权限"或者"缺省的访问权限"
 *          这是因为它不对应任何关键字
 *          只要在写访问权限修饰符的位置,不写任何关键字就是该访问级别.
 *
 *      3.不同包的子类中能够访问。
 *          这里牵扯到子类的概念,是继承中的概念
 *          所以这个访问级别在继承中再学习它
 *          这个访问级别对应关键字: protected
 *          称之为"受保护的"访问权限
 *
 *      4.不同包的其他类都能够任意访问,相当于没有访问权限控制,随便任意被访问
 *          它对应关键字:"public"
 *          表示公共的访问权限,可以任意被访问,没有限制.
 *
 * 以上注意事项:
 *      1.更宽松的访问级别总是包含更严格的访问级别.
 *      2.以上四种访问级别在修饰不同结构时,可以用的是不同的
 *          a.修饰(普通)类时: 只有两种访问级别,只有公共的和默认的访问权限
 *          b.修饰类中成员(包括普通成员,静态成员,以及构造器)时,
 *              四种访问级别皆可用
 *      3.局部变量已经被大括号限制死了作用域,只要出了作用域,局部变量就不可用了
 *          所以访问权限对它没有意义
 *      4.访问级别中,不写任何关键字的级别称之为"默认的访问权限"
 *          但是要注意它不是对应关键字"default"
 *
 *
 * @since 09:55
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // private int num = 10;
        MyDemo md = new MyDemo();
        // 不能用MyDemo2是因为没有访问权限,不是没有导包
        // Cannot resolve symbol 'MyDemo2'
        // MyDemo2 md2 = new MyDemo2();
    }
}

// class A就具有默认的访问权限
class A {
}